import { constantRoutes, asyncRoutes } from '@/router/index'

const state = {
  // 提供侧边栏渲染，默认是静态路由
  // 最终是静态路由 + 用户拥有权限路由
  routes: constantRoutes
}
const mutations = {
  // 设置完整路由
  setRoutes(state, data) {
    // 静态路由 + 用户拥有路由权限
    state.routes = [...constantRoutes, ...data]
  }
}

const actions = {
  // 通过服务器返回的权限标识和本地路由的name进行匹配
  filterRoutes(context, menuMarks) {
    // asyncRoutes 是本地完成的动态路由权限
    // menuMarks 是服务端返回的权限标识
    // 用户所拥有的的路由权限
    const userRoutes = []
    // 遍历完整路由
    asyncRoutes.forEach(item => {
      // item 表示1级菜单
      // 这里是只处理了1级
      if (menuMarks.find(obj => obj.name === item.name)) {
        if (item.children && item.children.length) {
          // val 表示所有的2级
          const temp = item.children.filter(val => {
            return menuMarks.find(o => o.name === val.name)
          })
          // 将筛选出来的所有2级重新赋值给item
          item.children = temp
        }
        userRoutes.push(item)
      }
    })
    context.commit('setRoutes', userRoutes)
    return userRoutes
  }
}

const getters = {}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}
